'''
    这个后端框架的api编写有一定的要求

    函数参数:
        1. httpReqObj         http请求对象    用于获取http请求信息
        2. httpResponseObj    http响应对象    用于设置http响应信息
    函数返回值:
        类型必须为: bytes
        由于 http 响应数据的 tcp 传输需要字节流的形式

    例如:
        def api_func(httpReqObj, httpResponseObj):
            # 获取http请求方法
            httpReqObj.method

            # 设置响应头部
            httpResponseObj.setHeader({'content-type': 'application/json; charset=utf-8'})

            # 返回响应体 类型应为 bytes
            return b'23453545546465'
'''


import cv2

from . import video


def init():
    '''
        本模块的初始化方法

        由本后端框架自动调用
        使用本框架的用户只需要将其他模块的初始化方法加入到本函数中即可
    '''
    video.init()

def videoSize(httpReqObj, httpResponseObj):
    '''
        web api 接口
        用于获取视频流图像的大小
    '''
    if httpReqObj.method == 'GET':
        httpResponseObj.setHeader({'content-type': 'application/json; charset=utf-8'})
        shape = video.get_shape()
        print('in video size func', shape)
        res = f'{shape[0]} {shape[1]}'
        res = res.encode('utf-8')
        return res
    else:
        return b''

def getImg(httpReqObj, httpResponseObj):
    '''
        web api 接口
        用于返回一帧图像
    '''
    if httpReqObj.method == 'GET':
        httpResponseObj.setHeader({'content-type': 'image/jpeg'})
        httpResponseObj.setHeader({'Expires': '0'})
        httpResponseObj.setHeader({'cache-control': 'no-store, no-cache, must-revalidate'})
        httpResponseObj.setHeader({'pragma': 'no-cache'})
        res = video.get_img()
        res = cv2.imencode('.jpg', res)[1]
        res = res.tobytes()
        # print('正确返回图像')
        return res
    else:
        return b''


